#ifndef CCONFIGURACAO_H
#define CCONFIGURACAO_H

#include <QObject>
#include <QtXml/QtXml>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
#include <QColor>

class CConfiguracao : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString textoEmailApresentacao READ getTextoEmailApresentacao WRITE setTextoEmailApresentacao NOTIFY textoEmailApresentacaoChanged)
    Q_PROPERTY(QString contaEmailEnvio READ getContaEmailEnvio WRITE setContaEmailEnvio NOTIFY contaEmailEnvioChanged)
    Q_PROPERTY(QString caminhoDocumentoCurriculo READ getCaminhoDocumentCurriculo WRITE setCaminhoDocumentoCurriculo NOTIFY caminhoDocumentCurriculoChanged)
    Q_PROPERTY(bool curriculoSelecionado READ getCurriculoSelecionado NOTIFY curriculoSelecionadoChanged)
    Q_PROPERTY(QDateTime dataUltimaAtualizacao READ getDataUltimaAtualizacao NOTIFY dataUltimaAtualizacaoChanged)
    Q_PROPERTY(QColor corVagaContatada READ getCorVagaContatada WRITE setCorVagaContatada NOTIFY corVagaContatadaChanged)
    Q_PROPERTY(QColor corVagaNova READ getCorVagaNova WRITE setCorVagaNova NOTIFY corVagaNovaChanged)

public:    
    static const QString c_basePrincipal;

    explicit CConfiguracao(QObject *parent = 0);
    Q_INVOKABLE void CarregarConfiguracao();

    QDateTime getDataUltimaAtualizacao();
private:
    QString _textoEmail, _nomeCurriculo, _contaEmail;
    QDateTime _dataUltimaAtualizacao;
    QColor _corVagaContatada, _corVagaNova;

    QString getTextoEmailApresentacao();
    QString getCaminhoDocumentCurriculo();
    QString getContaEmailEnvio();
    bool getCurriculoSelecionado();    
    QColor getCorVagaContatada();
    QColor getCorVagaNova();

    void setTextoEmailApresentacao(const QString &textoEmailApresentacao);
    void setCaminhoDocumentoCurriculo(const QString &caminhoDocumento);
    void setContaEmailEnvio(const QString &contaEmail);
    void setCorVagaContatada(QColor cor);
    void setCorVagaNova(QColor cor);

    void VerificarBaseAplicacao();
    
signals:
    void textoEmailApresentacaoChanged();
    void caminhoDocumentCurriculoChanged();
    void contaEmailEnvioChanged();
    void curriculoSelecionadoChanged();
    void dataUltimaAtualizacaoChanged();
    void corVagaContatadaChanged();
    void corVagaNovaChanged();

    void configuracaoSalva();
    void configuracaoCarregada();

    void informacoesIncorretas();
    
private slots:
    void atualizarTextoEmail();
    void atualizarContaEmail();
    void atualizarCaminhoCurriculo();
    void atualizarDataUltimaAtualizacao();
};

inline QString CConfiguracao::getTextoEmailApresentacao() { return _textoEmail; }
inline QString CConfiguracao::getContaEmailEnvio() { return _contaEmail; }
inline QString CConfiguracao::getCaminhoDocumentCurriculo() { return _nomeCurriculo; }
inline bool CConfiguracao::getCurriculoSelecionado() { return QFile::exists(_nomeCurriculo); }
inline QDateTime CConfiguracao::getDataUltimaAtualizacao() { return _dataUltimaAtualizacao; }
inline QColor CConfiguracao::getCorVagaContatada() { return _corVagaContatada; }
inline QColor CConfiguracao::getCorVagaNova() { return _corVagaNova; }

inline void CConfiguracao::setTextoEmailApresentacao(const QString &textoEmailApresentacao) { _textoEmail = textoEmailApresentacao; emit textoEmailApresentacaoChanged(); }
inline void CConfiguracao::setContaEmailEnvio(const QString &contaEmail) { _contaEmail = contaEmail; emit contaEmailEnvioChanged(); }
inline void CConfiguracao::setCaminhoDocumentoCurriculo(const QString &caminhoDocumento)
{    
    QFile f(caminhoDocumento);
    if (f.exists())
    {        
        _nomeCurriculo = caminhoDocumento;
        emit caminhoDocumentCurriculoChanged();
        emit curriculoSelecionadoChanged();
    }
    else
        emit informacoesIncorretas();
}


#endif // CCONFIGURACAO_H
